<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // ES6之前的对函数参数默认值的设置方式
        function calc(a,b){
            //早期函数参数默认值的定义方式
           /*  if(!a){
                a=0;
            }
            if(!b){
                b=0;
            } */

            a=a||0;
            b=b||0;
            var sum=a+b;
            console.log(sum);
        }
        calc(NaN,8);
        calc(20);

        //ES6中提供函数定义形参时的默认赋值语法
        function show(x,y="我是默认值"){
            console.log(x);
            console.log(y);
        }
        // show();
        show(100,200);

        function calcSum(){
            var a=10;
            var b=20;
            return a+b;
        }
        //ES6中形参的默认值可以赋值为函数调用
        function show2(n=calcSum()){
            console.log(n);
        }
        show2();
        show2(1000);

        function show3(arr,leg=arr.length){
            console.log("数组：",arr);
            console.log("长度：",leg);
        }
        show3([1,2,4,5]);
        show3(["alice","baby"]);


        //函数默认值和形参解构默认值
        var user={
            name:"tom",
            age:18
        };
        var user2={
            name:"alice"
        };
 /*        函数形参解构和形参默认值同时出现时，
            1.函数形参默认值，只有在该函数调用且未传入参数时获取
            2.形参解构后的对应属性默认，必须在解构表达式中进行定义，如{name,age=89} */
        // function show4({name,age}={age:89}){
        // function show4({name,age=67}){
        function show4({name,age=67}={}){
            console.log(name,age);
        }
        // show4(user);
        // show4(user2);
        show4();
    </script>
</head>
<body>
    
</body>
</html>